package gson.gson.cclass;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

import java.util.Map;
import java.util.Set;

public class JsonObjectExample {

    private JsonObject jsonObject;

    public JsonObjectExample() {
        this.jsonObject = new JsonObject();
    }

    /**
     * 添加一个 JsonElement 到 JsonObject。
     */
    public void add(String property, JsonElement value) {
        jsonObject.add(property, value);
    }

    /**
     * 添加一个 Boolean 类型的属性。
     */
    public void addProperty(String property, Boolean value) {
        jsonObject.addProperty(property, value);
    }

    /**
     * 添加一个 Character 类型的属性。
     */
    public void addProperty(String property, Character value) {
        jsonObject.addProperty(property, value);
    }

    /**
     * 添加一个 Number 类型的属性。
     */
    public void addProperty(String property, Number value) {
        jsonObject.addProperty(property, value);
    }

    /**
     * 获取所有属性键值对。
     */
    public Set<Map.Entry<String, JsonElement>> entrySet() {
        return jsonObject.entrySet();
    }

    /**
     * 重写 equals 方法，比较两个 JsonObject 是否相等。
     */
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        JsonObjectExample that = (JsonObjectExample) obj;
        return this.jsonObject.equals(that.jsonObject);
    }

    /**
     * 重写 hashCode 方法，生成 JsonObject 的哈希值。
     */
    @Override
    public int hashCode() {
        return this.jsonObject.hashCode();
    }


    /**
     * 获取指定成员的 JsonObject。
     */
    public JsonObject getAsJsonObject(String memberName) {
        return jsonObject.getAsJsonObject(memberName);
    }

    /**
     * 获取指定成员的 JsonPrimitive。
     */
    public JsonPrimitive getAsJsonPrimitive(String memberName) {
        return jsonObject.getAsJsonPrimitive(memberName);
    }

    /**
     * 检查指定成员是否存在。
     */
    public boolean has(String memberName) {
        return jsonObject.has(memberName);
    }

    /**
     * 删除指定的属性。
     */
    public void remove(String property) {
        jsonObject.remove(property);
    }
}
